package com.school.test;

import com.school.entity.Course;
import com.school.entity.Student;
import com.school.entity.Teacher;

/**
 * 测试类：模拟选课流程，验证继承、权限、业务逻辑
 */
public class TestSystem {
    public static void main(String[] args) {
        // 1. 创建课程实例
        Course math = new Course("C001", "高等数学", "第一教学楼101室", "周一/周三 14:00-16:00", 4);
        Course java = new Course("C002", "Java编程", "第二教学楼205室", "周二/周四 09:00-11:00", 3);

        // 2. 创建教师实例，开课并打印授课信息
        Teacher liTeacher = new Teacher("T001", "李老师", "女");
        Teacher wangTeacher = new Teacher("T002", "王老师", "男");

        liTeacher.openCourse(math);
        wangTeacher.openCourse(java);
        liTeacher.printWorksheet(); // 调用重写的方法：打印教师授课信息
        wangTeacher.printWorksheet();

        // 3. 创建学生实例，模拟选课/退课/打印课表
        Student zhang = new Student("S001", "张三", "男");
        Student li = new Student("S002", "李四", "女");

        // 张三操作：选课→打印课表→退课→选新课→打印课表
        zhang.selectCourse(math);
        zhang.printWorksheet(); // 调用重写的方法：打印学生课表
        zhang.dropCourse();
        zhang.selectCourse(java);
        zhang.printWorksheet();

        // 李四操作：选课→打印课表
        li.selectCourse(math);
        li.printWorksheet();

        // 验证跨包权限：无法直接访问Person的protected属性（如下代码会报错）
        // System.out.println(zhang.id); // 错误：id是protected，TestSystem非子类且跨包
        System.out.println("张三的学生编号：" + zhang.getId()); // 正确：通过Getter访问
    }
}